/*
 * power by 一代聪明师 start in 2019-01-16
 * */
var $app = {
	// APP_NAME: "CLOUD_JINGBAO",//app名称（请严格按格式书写）
	// APP_VERSION: "v1.10.20190403",//版本号（请严格按格式书写）
	APP_NAME: '/* @echo APP_NAME */',
	APP_VERSION: '/* @echo APP_VERSION */',
	

	/**
	 * 全系统只需要改一个地方，即可在正式服/测试服之间切换
	 * true正式服/false测试服
	 **/
	apiWhere: '/* @echo API_WHERE */' === 'true',

	//ajax请求方式：true为jQuery方式(web方式不能跨域)、false为品高方式(原生APP方式类似，可以跨域)
	useNative: false,

	navLength: 0,//底部导航数

	pageLimit: 10,//每页多少条数据

	//上拉加载更多 提示语
	upTipsTxt: '<i class="icon-up marginR5 stringBug2"></i>上拉加载更多</span>',
	timeout: 10000,
	fileFormat: '.html',//项目的文件格式
	dateMinTime: '2000-01-01',//设置日历最小时间
	smsTem: '441900199111111111,黄小明,13811112222;441900199111111111,黄小明,13811112222;(多个来访人请以 ; 隔开)',//短信模板提示音

	/**
	 * @function 缓存同行人编辑dom，为后续清除使用
	 */
	_VISIT_ELE: '',




	// 判断数据是否存在：空对象，null，undefined，空数组，字符串，数字，0 全兼容
	judgeData: function (data) {
		var judge;
		if (typeof data === 'number') {
			data == 0 ? judge = false : judge = true;
		} else if (typeof data === 'boolean') {
			judge = data;
		} else if (typeof data === 'object') {
			//转成数组再判断
			if (data instanceof File) {
				judge = true;
			} else {
				(!!$app.objToArray(1, data).length) ? judge = true : judge = false;
			}
		} else {
			(data && data.length) ? judge = true : judge = false;
		}
		return judge;
	},

	//来访时间必须大于当前时间判断
	comeTime: function (dom, callback) {
		var tA = $app.today();
		var today = $app.formatTime(1, tA);
		var B = new Date(today);
		var B3 = B.getTime() / 1000;//当前时间


		var time = $(dom).val();
		var D = new Date(time);
		var D3 = D.getTime() / 1000;//目标时间
		// console.log(B3,D3);

		if (B3 >= D3) {
			$app.alert('来访时间必须大于当前时间', '温馨提示', function () {
				$(dom).focus();
			});
		} else {
			callback instanceof Function && callback();
		}
	},

	//上拉加载函数 总判断
	iScrollDo: function (res, _iScroll, callBack) {

		
		// 判断是否有数据
		if (res.count == 0) {

			//销毁整个上拉加载容器, 将注销滚动条监听事件，既滚动条失效
			_iScroll.destroyMe();
			$('.pullUpLabel').html('暂无数据');

		} else {//逻辑继续
			
			callBack(res.data);
			
			if (res.pageNum == res.pageNo) {//总页数==当前页数 没有下一页
				_iScroll.destroyMe();
				
				/**
				 * 可能存在其他页面的滚动条容器未被正常销毁，造成当前滚动条失效
				 */
				$('.pullrefresh-wrapper').map((index, item) => {
					ui.IScroll.init(item, {
						scrollBar: true,
						enablePullDown: false,
						enablePullUp: false,
					});
				})
			

				$('.pullUpLabel').html('已经到底');
			};

		}

	},

	//返回时间把秒截掉
	delSecond: function (time) {
		var out = '';
		if ($app.judgeData(time)) {
			var num = (time.split(':')).length - 1;
			if (num >= 2) {
				var numWhen = time.lastIndexOf(':');
				var ok = time.substring(0, numWhen);
				//console.log(ok);
				out = ok;
			} else {
				out = time;
			}
		}
		return out;
	},

	
	/**
	 * @warning 已失效, 不敢删
	 */
	//系统状态判断
	systemStatus: function (num) {
		var out = '';
		switch (parseInt(num)) {//num:0：预约，1：已访，4：待审批，9：取消
			case 0: out = '未 访'; break;
			case 1: out = '已 访'; break;
			case 4: out = '待审批'; break;
			case 9: out = '取 消'; break;
		}
		return out;
	},

	/**
	 * @warning 已失效，不敢删
	 */
	//系统状态颜色
	systemStatusColor: function (num) {
		var out = {
			0: 'cGreen',
			1: 'cBlue',
			4: 'cRed',
			9: 'cCCC',
			10: 'c888'
		};
		return out[num];
	},
	//刷新上一级
	exReload: function (callBack) {
		callBack instanceof Function && callBack();
		setTimeout(function () {
			ui.refresh();
		}, 400);
	},
	
	//是否重点人员，是否临控人员
	juPersonS: function (idcard, callBack) {
		//验证是否重点人员，true才会进入第一个fun，false进入第二个fun
		$ajax.juImporPer(idcard, 
			function () {
			var e = { who: '1' };//1重点人员 2临控人员 3正常人
			callBack instanceof Function && callBack(e);
		}, function () {
			//验证是否临控人员，true才会进入第一个fun，false进入第二个fun
			$ajax.juLinKong(idcard, 
			function () {
				var e = { who: '2' };//1重点人员 2临控人员 3正常人
				callBack instanceof Function && callBack(e);
			}, 
			function () {
				var e = { who: '3' };//1重点人员 2临控人员 3正常人
				callBack instanceof Function && callBack(e);
			});
		});
	},

	
	
	
	
	/**
	 * @warning 失效
	 */
	//编辑同行人
    delRM:function (b) {

		var e=$(b).parent('li');
		var obj=$app.spanEach($(e),[])[0];
		var html = '<div style="height:310px;"class="bgWhite" >'+$app.xxJR(obj.name,obj.idCard,obj.phone)+'<div class="row-fluid paddingT10">\
                    <div class="span6 paddingLi" style="padding-right:2px !important;">\
                        <button type="button" data-role="BTButton" data-inline="true" data-theme="a" class="width100 paddingLi lineBlack borderNone" onclick="$app.xrPi()">删除</button>\
                    </div>\
                    <div class="span6 paddingLi" style="padding-left:2px !important;">\
                        <button type="button" data-role="BTButton" data-inline="true" data-theme="a" class="width100 paddingLi lineBlue borderNone" onclick="$app.qxM()">确定</button>\
                    </div>\
                </div>\
			</div>';
			
			
        ui.popup({
            html: html,
            pos: 'bottom',
            showCloseBtn: false
		});
		
		//删除同行人
		$app.xrPi=function(){
			$app.confirm('删除此同行人？', '温馨提示', {
				yesText: '确定',
				yesFun: function () {
					$(e).remove();
					ui.closePopup();//关闭弹框
				}
			});
		};

		//修改来访人信息
		$app.qxM=function(){
			$(e).remove();
			$app.qxT();
		};
	},


	
	//新建或编辑来访人
	/**
	 * ppA 来访人 
	 * ppB 身份证
	 * ppC 手机号
	 */
	xxJR:function(ppA,ppB,ppC){
		var cc=($app.judgeData(ppC)?parseInt(ppC):'')
		var out='<ul class="table-view lineLeft0 f_24 "><li class="table-view-cell padding10 form margin0">\
			<div class="row-fluid margin0">\
				<div class="span3">\
					<div class="label text-right">来访人:</div>\
				</div>\
				<div class="span9 c888"><input type="text" id="ppA" value=\"'+($app.trim(ppA || '' ))+'\" placeholder="请输入姓名" class=" input-large c888 borderNone f_24 c666" /></div>\
			</div>\
		</li>\
		<li class="table-view-cell padding10 form margin0">\
			<div class="row-fluid margin0">\
				<div class="span3">\
					<div class="label text-right">身份证:</div>\
				</div>\
				<div class="span9 c888"><input type="text" id="ppB" value=\"'+(ppB||'')+'\" placeholder="请输入身份证号码" class=" input-large c888 borderNone f_24" /></div>\
			</div>\
		</li>\
		<li class="table-view-cell padding10 form margin0">\
			<div class="row-fluid margin0">\
				<div class="span3">\
					<div class="label text-right">手机号:</div>\
				</div>\
				<div class="span9 c888"><input type="number" id="ppC" value=\"'+(cc||'')+'\" placeholder="请输入手机号" class=" input-large c888 borderNone f_24" /></div>\
			</div>\
		</li></ul>';
		return out;
	},

	//新增人员
	xinZengR:function(){
		// var html = '<div style="height:310px;"class="bgWhite" >'+$app.xxJR()+'<div class="row-fluid paddingT10">\
        //             <div class="span12 paddingLi">\
        //                 <button type="button" data-role="BTButton" data-inline="true" data-theme="a" class="width100 paddingLi lineBlue borderNone" onclick="$app.qxT()">确定</button>\
        //             </div>\
        //         </div>\
		// 	</div>';


		const initData = {
			name: '',
			idCard: '',
			phone: ''
		}
			
        ui.popup({
            html: $app.pipe(
				initData => [$app.visitorEditPopup(initData)],
				tmpList => [...tmpList, $app.visitorCreate()],
				tmpList => $app.visitorContainer(...tmpList)
			)(initData),
            pos: 'bottom',
            showCloseBtn: false
        });
	},

	
	
	//来访人去重函数
	removeDuplicatedItem: function (arr) {
		var res = [arr[0]];
		for (var i = 1; i < arr.length; i++) {
			var repeat = false;
			for (var j = 0; j < res.length; j++) {
				if (parseInt(arr[i].idCard) === parseInt(res[j].idCard)) {
					repeat = true;
					break;
				}
			}
			if (!repeat) {
				res.push(arr[i]);
			}
		}
		return res;
	},
	//在首页循环出要的数据：姓名，身份证，手机号
	mingSS: function (dom) {
		var li = $(dom).find('li');
		//来访人员数组
		return $app.spanEach(li,[]);
	},
	//配黑上者使用
	spanEach:function(li,xArray){

		li.forEach(function(val,i){
			
			var span = $(val).find('.oneIn');
			var zAr = [];
			span.each(function (i, val) {
				var zhi = $(val).text();
				zAr.push(zhi);
			});


			var dK = {
				name: zAr[0],
				idCard: zAr[1],
				phone: zAr[2]
			};

			xArray.push(dK);
		});
		return xArray;
	},
	//人员身份证ID，覆盖重复重新渲染dom
	chongFu: function (dom, yArray, callBack) {
		//来访人去重函数

		var xArray = $app.removeDuplicatedItem(yArray);
		console.log('原数组 = ', yArray);
		console.log('去重后的新数组 = ', xArray);

		$(dom).html('');//内容去空


		xArray.forEach(function (val, i) {
			
			//判断是否重点人员+临控人员
			$app.juPersonS(val.idCard, function (e) {
				var who = e.who;//1重点人员 2临控人员 3正常人
				var htmlK = $app.okMsgPer(val.name, val.idCard, val.phone, who);
				$(dom).append(htmlK);//尾部添加
			});

		});

		(yArray.length != xArray.length) && (app.hint("重复人员已覆盖"));

		callBack instanceof Function && callBack();
	},




	/**
	 * @function 来访人信息校验
	 * @return { false | array } 返回来访人列表数据, 为false时，数据校验未通过 
 	 */
	visitorChackout(){
		
		const formConf = $app.visitorConf();
		const data = formConf.reduce((acc, next) =>{
			if(!acc){return false}
			
			const val =  $app.inputVal(`.${next.className}`)
			const hasVal = next.check(val);
			acc[next.key] = val;

			// 空值回调
			!hasVal&&next.callback&&next.callback();
			
			return hasVal ?  acc : false;
			
		}, {})
		
		return data ? [...$app.mingSS('#_nav1_txP'), data] : false
		
	},

	/**
	 * @function 底部新增人员
	 * @summary 修改原代码内容， 函数名及接口延用原代码
	 * 
	 */
    qxT:function () {
		const visitorList = $app.visitorChackout()
		visitorList&&$app.chongFu('#_nav1_txP', visitorList, ui.closePopup);
    },
	
	

	
	/**
	 *@function 同行人编辑删除
	 */
	visitorDe(){
		
		$app.confirm('删除此同行人？', '温馨提示', {
			yesText: '确定',
			yesFun: function () {
				$(e).remove();
				ui.closePopup();//关闭弹框
			}
		});
		
	},
	
	/**
	 * @function 同行人编辑确认
	 */
	visitorDel(){
		
		$app.confirm('删除此同行人？', '温馨提示', {
			yesText: '确定',
			yesFun: function () {
				$app._VISIT_ELE.remove();
				ui.closePopup();
			}
		});

	},

	/**
	 * @function 修改来访人信息
	 */
	visitorEnter(){
		$app._VISIT_ELE.remove();
		$app.qxT();
	},
	


	/**
	 * @function 显示人员编辑弹窗
	 * 
	 */
	editPopup(tmp){
	   
		const $card = $(tmp).parent()
		const data = $app.spanEach($card, [] )[0];
	    const html = $app.pipe(
			data => $app.visitorEditPopup(data),
			formTmp => [ formTmp, $app.visitorEditControl() ],
			tmp => $app.visitorContainer(...tmp),
            tmp => ui.popup({ html: tmp, pos:'bottom', showCloseBtn: false })
		)(data)   
		
		
		$app._VISIT_ELE = $(tmp).parents('li')
		
	},
	
	/**
	 * @function 创建联系人模板
	 * @param { string } name 人员名称 
	 * @param { string } id 身份证 
	 * @param { string } phone 手机号 
	 * @param { string } who  人员类型  1重点人员 2临控人员 3正常人
	 * @summary " vigilant " 重点人员类， 接口及函数名继承原代码，修改接口我也不知道会发生什么
	 */
	okMsgPer: function (name, id, phone, who) {
		
		const _typeConf = {
			[1]: '重点人员',
			[2]: '临控人员'
		}
		const type = parseInt(who);
		const typeLabel = _typeConf[type] || '';
		const _labelConf = [

			['姓名:', Name(setValPoint(name || ''),  typeLabel)],
            ['身份证:', setValPoint(id)],
            ['手机号:', setValPoint(phone)]
			
		]

		/**
		 * @function 设置取值点
		 * @param { string } val 
		 * @summary 原来代码中， 通过类 oneIn 获取dom数据,
		 */
		function setValPoint(val=''){
			return `<span class='oneIn'> ${val} </span>`
		}

		function warning(label){
			return label ? `<span class='c888' style='color: #333 !impotant'> 【${label}】 </span> ` : ''
		}
		
		function Name(name, label){
			return `
				<div class='l-inline-block-left'> ${name} ${ warning(label) } </div>
			`
		}

		
		
		function warp(id, type, inner){
			return `
				<li data-id="${id}"
				onclick="$app.toBadManInfo(this)" 
				class=" ${type != 3 ? 'vigilant' : ''} " >
					${inner}
				</li>
			`
		}

		function warpIcon(inner){
			return `

				<div class='l-inline-block'>
					<div class='info' style='flex: 1 1'>
						${inner}
					</div>
					<div onclick="$app.editPopup(this)" >
						<i 
						class='iconfont iconedit' 
						style=' display: block; flex: 0 0 auto; width: 40px: height: 40px; font-size: 32px' />
					</div>
				<div>
			`
		}
		
		return $app.pipe(
			conf => conf.reduce((acc, next) => acc +  $app.CardItem(...next), ''),
			inner => warpIcon(inner),
			inner => $app.Card(inner),
			inner => warp(id, type, inner)
		)(_labelConf)

	},

	/**
	 * @function 跳转外部轻应用
	 * @summary 来访人员类型为“重点人员时” 跳转外部轻应用，查看人员信息。
	 * @param {ele} 选中元素 
	 */
	toBadManInfo(ele){
		
		const $ele = $(ele)

		const idCoder = $ele.attr('data-id')

		const params = {
			appCode: '',
			data: { APP_NAME: '' },
			appUrl: ''
		}

		// app.link.runApp

	},


    
	/**
	 * @function 来访状态配置缓存
	 */
	 _VISIT_STATUS: '',	
	
	 /**
	  * @function 获取来访类型
	  * @param { string | number } sign 类型标识 
	  */
	 VISIT_STATUS (sign='default'){
		 
		 // 惰性求值
		 $app._VISIT_STATUS = $app._VISIT_STATUS || $app.createVisitStatus()
		 return $app._VISIT_STATUS[sign] || {}
	 },
 
 
	 /**
	  * @function 创建全局来访类型
	  * @param { boolean } source 
	  */
	 createVisitStatus(source=false){
 
		 const STATUS_CONF = [
			 {
				 _code: 4,
				 _label: '待审批',
				 code: 4,
				 label: '待审批',
				 color: '#ef5658',
				 sort: 2,
			 },
			 {
				 _code: 20,
				 _label: '未访',
				 code: 20,
				 label: '未 访',
				 color: '#31e9ab',
				 sort: 3,
			 },
			 {
				 _code: 1,
				 _label: '已访',
				 code: 1,
				 label: '已 访',
				 color: '#1f6df5',
				 sort: 4,
			 },
			 {
				 _code: 10,
				 _label: '过期',
				 code: 10,
				 label: '过 期',
				 color: '#888',
				 sort: 4
			 },
			 {
				 _code: 'default',
				 _label: '全部',
				 code: ' ',
				 label: '全 部',
				 color: '#999',
				 sort: 4
			 },
			 {
				 _code: 9,
				 _label: '取消',
				 code: 9,
				 label: '取 消',
				 color: '#ccc',
				 sort: 4,
			 },
			 
		 ]
		 
		 return source ? STATUS_CONF : $app.createEnum(...STATUS_CONF)
		 
 
	 },
};

//之所以不放在app.page.onLoad 里，是为了页面也能在PC上调试
$(function () {
	//单页的声明
	ui.run({
		appType: 'single',
		showPageLoading: false,
		//初始化的操作
		init: function () {
			//设置皮肤,打成安装包才会真正持久化数据
			var color = "#1fa0fb";

			//皮肤设置
			ui.Skin.init({
				bgColor: 'linear-gradient(#2cb4f5, #1e91f2)',
				bgColorActive: color,
				borderColor: '#096fc0',
				iconFontColor: color,
				iconFontColorSelector: [".thumbnail [class^='icon-']", ".list-view .icon"]
			});
		}
	});
});



/**
 *  重点人员： 500221198511222412
 */